本篇文章作為第二週的第五篇,我們將進入 SQL 的世界,
本篇說明如何使用 phpmyadmin 進行資料庫 SQL 指令的執行以及 SQL 指令的介紹。
--------系列簡介--------
網站系統可說是現在最多學子與新人想要入門的一個領域,
這個原本屬於新興的領域,這幾年來也累積許多年的知識與 pattern ,
在有限的環境(stateless)與有限的伺服器端、瀏覽器資源下,
成為許多人進入程式的一塊入門鐵板(?)。
這個系列希望能夠就網站系統設計幾個門檻著手,
這是設定給初心者作為學習,給同好們作為回顧,
重新認識有關網站系統的每個環節。
本週相當的忙碌,寫得又是比較抽象的資料議題,
所以之前走向比偏向於基本的介紹,不過這篇就不能再偷懶了。XD
OK 我們來把昨天沒仔細講完的部份講完。:)
首先昨天我們提到資料庫、資料表,
另外我們一直沒有提到資料庫中最重要得細節部份, SQL 。
因為 SQL 對一般的狀況而言,是很多新手入門 Database 主要的門檻,
所以我們把這道主菜留到最後。
這一篇我們會仔仔細細的用 SQL 講完那些真正重要的基礎細節。(笑)
當然,為了讓你知道該怎麼執行,在最一開始的過程中,
我們先介紹該如何在 PHPMyAdmin 中執行 SQL:
1.先點進資料庫
2.點 SQL Table
3.輸入 SQL 指令,按下執行,檢視結果
(下圖以讀出所有資料表為例,語法為 "Show tables" 。)
就這麼簡單,另外當你點進資料庫執行 SQL 時,
有一道隱含的 SQL 指令是 "use testdatabase;"。
表示指定 testdatabase 進行查詢。 XD
好的,然後有關資料表,還有一件事情我們昨天還沒有提到:
1.資料表裡面我們多了一個 MissionId 欄位,
這是用來作為編號的,這是蠻常見的習慣。
(一般而言,依照增加的順序循序增加的數字,我們稱之為流水號。)
資料庫有一個設定叫做 AUTO_INCREMENT ,
可以自動讓一個欄位在新增時自動取得一個不重複的流水號。
假設我設定 MissionId 是 AUTO_INCREMENT ,
那我新增第一筆時,系統會自動設定該欄位為 1 ,
新增第二筆時,系統會自動設定該欄位為 2 ,以此類推。
有關 AUTO_INCREMENT ,可以參考這篇:
http://jiannrong.blogspot.tw/2008/02/mysqlautoincrement.html
另外一般而言,這個流水號也會是所謂的主鍵(Primary Key),
不過鍵(Key)、索引(Index) 這些麻煩事,
我們留到明後天在說,眼前我們先專注在基本的資料庫語法。
在這裡只要先瞭解 AUTO_INCREMENT 就可以了。:)
@ 有關資料庫,常常只是看文章很無聊?
那看這篇文章就對了,我們不只有概念介紹也可以有實務的操練。:)
在我們進行實務練習之前,我們先重新介紹,
我們目前用到的所有 SQL 操作指令:
1.建立資料庫 (這用管理工具建就夠了,實際上手打的機會其實不多。)
create database testdatabase;
2.建 messageboard 資料表
use testdatabase; -- 指定資料庫
CREATE TABLE `messageboard` (
`messageID` bigint(20) NOT NULL AUTO_INCREMENT,
`MessageCategory` bigint(20) DEFAULT NULL,
`Author` varchar(100) NOT NULL,
`UserId` bigint(20) NOT NULL,
`Content` text NOT NULL,
`postDate` date DEFAULT NULL,
PRIMARY KEY (`messageID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
基本上筆者大部分建立資料表也是透過視覺工具多,
倒是修改 table 欄位時,才比較有機會下到 sql 指令。
這裡有些有關欄位的細節可以講,以這個為例:
Author
varchar(100) NOT NULL,
* Author
是欄位名稱
* varchar(100) 是欄位型態
* NOT NULL 一定要給資料才能新增/編輯
* DEFAULT NULL 允許不給資料就能新增/編輯
@ 常用欄位型態列舉如下:
* bigint ,數字欄位常用這個,
* varchar 長度有限字串
後面括號裡面會接字串的長度,像是 varchar(100) 就是長度為一百的字串,
使用 varchar 時要知道你字串可能會有多長,如果輸入超過這長度的字串可能會被截短。
適合一兩千字以內的文字欄位。
* text 比較長的文字欄位或者採用 html 內容的欄位通常會用這個,可以容納幾萬字。
具體長度大小可以看這裡 http://www.electrictoolbox.com/maximum-length-mysql-text-field-types/
* date 日期欄位
* tinyint(1) ,常用來作為 boolean 用。( 0 是 false , 1 是 true)
* longblob 如果你想把 binary 的檔案放進資料庫,
就是這個選項了,但基本上不建議把檔案放進資料庫。
@ 欄位選用概念
1.處理欄位時,主要要考慮的是類型要合用、大小要適合,
原則上可以稍微略大一點是沒有關係,
但是欄位的大小也會影響資料庫實際的儲存空間大小,
如果濫用過頭,會造成無謂的浪費;所以請自行斟酌吧。
2.像數字基本上有分 tinyint , int , bigint ,
筆者的看法是 int 跟 bigint 差距不大,倒不如直接用 bigint 了。
欄位的類型實際上有非常多種,但選用時筆者是覺得在幾個常用選項中選擇就夠了。
好的,總算有比較正規的資料庫介紹了。XD
另外,雖然筆者實在是覺得就使用上去區分這個沒有意義,
不過還是要介紹,
一般把建立資料庫、資料表、鍵值,這種針對資料庫結構去作操作的 SQL 語法,
像是 CREATE TABLE 、CREATE DATABASE 、 ALTER TABLE ...etc
這些我們稱之為 DDL (data definition language),資料定義語言。
另外去新增 (Insert)、修改(Update) 資料表裡面的數據的,
我們稱之為 DML( Data Manipulation Language) ,資料處理語言。
不過筆者這些年來,是真的從來沒感覺到,
學會 DDL 跟 DML 這兩個名詞有什麼實質幫助過。XD
那在我們繼續之前,讓大家切切實實的感受一下資料庫的感受吧?
雖然前面已經教大家如何在 PHPMyAdmin 執行 SQL ,
但相信大家看文章時不一定會想開 PHPMyADMIN 起來,可能也有些人還沒裝,
所以接下來本週有關 database 操作的範例時,我們會採用 SQL Fiddle 這個線上服務進行操作。
(原則上第三週開始才會正式進入,真的要自己架設 apache / mysql /php 環境進行開發的進度。)
那我們就先用剛剛建立資料表的範例,先說明這個服務吧:
歡迎線上體驗:
http://sqlfiddle.com/#!2/a6094/1/0
很有趣吧? XD
接下來我們將繼續把之前文章介紹的留言板的表格一一實作完成,
然後並且將我們之前已經定義好得資料放進去:
所以接下來我們先逐步實作剩下的兩張表:
1.user 使用者表格
CREATE TABLE `user` (
`UserId` bigint(20) NOT NULL AUTO_INCREMENT, -- 使用者 ID
`Name` varchar(30) NOT NULL, -- 姓名
`Email` varchar(150) NOT NULL,
PRIMARY KEY (`UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
線上執行範例:http://sqlfiddle.com/#!2/6af62/1/0
2.MessageCategory 留言類別表格
CREATE TABLE `messagecategory` (
`messageCategoryID` bigint(20) NOT NULL AUTO_INCREMENT, -- 類別ID
`Name` varchar(50) NOT NULL, -- 類別名稱
PRIMARY KEY (`messageCategoryID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.接著我們來將之前的資料,寫成一筆一筆的新增語法,作為今天的結尾:
先來新增類別
1 生活
2 工作
3 聚會
insert into missioncategory values ('生活');
insert into missioncategory values ('工作');
insert into missioncategory values ('聚會');
線上操作連結: http://sqlfiddle.com/#!2/f15ce/2/0
接著新增使用者
線上操作連結: http://sqlfiddle.com/#!2/b6e78/1/0
最後新增 Messageboard 的資料
線上操作連結 http://sqlfiddle.com/#!2/93871/1/0
OK 我們已經完成了我們所需要的操作,
剩下更多的指令教學,明天再敘吧。;)
tony1223提到:
雖然前面已經教大家如何在 PHPMyAdmin 執行 SQL ,
但相信大家看文章時不一定會想開 PHPMyADMIN 起來,可能也有些人還沒裝,所以接下來本週有關 database 操作的範例時,我們會採用 SQL Fiddle 這個線上服務進行操作。
SQL Fiddle ,現在學習任何事情,真得愈來愈方便了,
這麼多人體貼初學者,好感動。
雖然在ubuntu上裝 LAMP也降低很多難度了。
但是看到SQL Fiddle 還是讓人感動。
直接切入sql,不被枝節絆住。很多人可能真得phpadmin裝不起來!!就和mysql絕緣了!